
#line 1 "..\..\main.c" /0
 
 
 
 
 
  
#line 1 "..\..\stc15.h" /0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 sfr ACC         =   0xE0;    
 sfr B           =   0xF0;    
 sfr PSW         =   0xD0;    
 sbit CY         =   PSW^7;
 sbit AC         =   PSW^6;
 sbit F0         =   PSW^5;
 sbit RS1        =   PSW^4;
 sbit RS0        =   PSW^3;
 sbit OV         =   PSW^2;
 sbit F1         =   PSW^1;
 sbit P          =   PSW^0;
 sfr SP          =   0x81;    
 sfr DPL         =   0x82;    
 sfr DPH         =   0x83;    
 
 
 sfr P0          =   0x80;    
 sbit P00        =   P0^0;
 sbit P01        =   P0^1;
 sbit P02        =   P0^2;
 sbit P03        =   P0^3;
 sbit P04        =   P0^4;
 sbit P05        =   P0^5;
 sbit P06        =   P0^6;
 sbit P07        =   P0^7;
 sfr P1          =   0x90;    
 sbit P10        =   P1^0;
 sbit P11        =   P1^1;
 sbit P12        =   P1^2;
 sbit P13        =   P1^3;
 sbit P14        =   P1^4;
 sbit P15        =   P1^5;
 sbit P16        =   P1^6;
 sbit P17        =   P1^7;
 sfr P2          =   0xA0;    
 sbit P20        =   P2^0;
 sbit P21        =   P2^1;
 sbit P22        =   P2^2;
 sbit P23        =   P2^3;
 sbit P24        =   P2^4;
 sbit P25        =   P2^5;
 sbit P26        =   P2^6;
 sbit P27        =   P2^7;
 sfr P3          =   0xB0;    
 sbit P30        =   P3^0;
 sbit P31        =   P3^1;
 sbit P32        =   P3^2;
 sbit P33        =   P3^3;
 sbit P34        =   P3^4;
 sbit P35        =   P3^5;
 sbit P36        =   P3^6;
 sbit P37        =   P3^7;
 sfr P4          =   0xC0;    
 sbit P40        =   P4^0;
 sbit P41        =   P4^1;
 sbit P42        =   P4^2;
 sbit P43        =   P4^3;
 sbit P44        =   P4^4;
 sbit P45        =   P4^5;
 sbit P46        =   P4^6;
 sbit P47        =   P4^7;
 sfr P5          =   0xC8;    
 sbit P50        =   P5^0;
 sbit P51        =   P5^1;
 sbit P52        =   P5^2;
 sbit P53        =   P5^3;
 sbit P54        =   P5^4;
 sbit P55        =   P5^5;
 sbit P56        =   P5^6;
 sbit P57        =   P5^7;
 sfr P6          =   0xE8;    
 sbit P60        =   P6^0;
 sbit P61        =   P6^1;
 sbit P62        =   P6^2;
 sbit P63        =   P6^3;
 sbit P64        =   P6^4;
 sbit P65        =   P6^5;
 sbit P66        =   P6^6;
 sbit P67        =   P6^7;
 sfr P7          =   0xF8;    
 sbit P70        =   P7^0;
 sbit P71        =   P7^1;
 sbit P72        =   P7^2;
 sbit P73        =   P7^3;
 sbit P74        =   P7^4;
 sbit P75        =   P7^5;
 sbit P76        =   P7^6;
 sbit P77        =   P7^7;
 sfr P0M0        =   0x94;    
 sfr P0M1        =   0x93;    
 sfr P1M0        =   0x92;    
 sfr P1M1        =   0x91;    
 sfr P2M0        =   0x96;    
 sfr P2M1        =   0x95;    
 sfr P3M0        =   0xB2;    
 sfr P3M1        =   0xB1;    
 sfr P4M0        =   0xB4;    
 sfr P4M1        =   0xB3;    
 sfr P5M0        =   0xCA;    
 sfr P5M1        =   0xC9;    
 sfr P6M0        =   0xCC;    
 sfr P6M1        =   0xCB;    
 sfr P7M0        =   0xE2;    
 sfr P7M1        =   0xE1;    
 
 
 sfr PCON        =   0x87;    
 sfr AUXR        =   0x8E;    
 sfr AUXR1       =   0xA2;    
 sfr P_SW1       =   0xA2;    
 sfr CLK_DIV     =   0x97;    
 sfr BUS_SPEED   =   0xA1;    
 sfr P1ASF       =   0x9D;    
 sfr P_SW2       =   0xBA;    
 
 
 sfr IE          =   0xA8;    
 sbit EA         =   IE^7;
 sbit ELVD       =   IE^6;
 sbit EADC       =   IE^5;
 sbit ES         =   IE^4;
 sbit ET1        =   IE^3;
 sbit EX1        =   IE^2;
 sbit ET0        =   IE^1;
 sbit EX0        =   IE^0;
 sfr IP          =   0xB8;    
 sbit PPCA       =   IP^7;
 sbit PLVD       =   IP^6;
 sbit PADC       =   IP^5;
 sbit PS         =   IP^4;
 sbit PT1        =   IP^3;
 sbit PX1        =   IP^2;
 sbit PT0        =   IP^1;
 sbit PX0        =   IP^0;
 sfr IE2         =   0xAF;    
 sfr IP2         =   0xB5;    
 sfr INT_CLKO    =   0x8F;    
 
 
 sfr TCON        =   0x88;    
 sbit TF1        =   TCON^7;
 sbit TR1        =   TCON^6;
 sbit TF0        =   TCON^5;
 sbit TR0        =   TCON^4;
 sbit IE1        =   TCON^3;
 sbit IT1        =   TCON^2;
 sbit IE0        =   TCON^1;
 sbit IT0        =   TCON^0;
 sfr TMOD        =   0x89;    
 sfr TL0         =   0x8A;    
 sfr TL1         =   0x8B;    
 sfr TH0         =   0x8C;    
 sfr TH1         =   0x8D;    
 sfr T4T3M       =   0xD1;    
 sfr T3T4M       =   0xD1;    
 sfr T4H         =   0xD2;    
 sfr T4L         =   0xD3;    
 sfr T3H         =   0xD4;    
 sfr T3L         =   0xD5;    
 sfr T2H         =   0xD6;    
 sfr T2L         =   0xD7;    
 sfr WKTCL       =   0xAA;    
 sfr WKTCH       =   0xAB;    
 sfr WDT_CONTR   =   0xC1;    
 
 
 sfr SCON        =   0x98;    
 sbit SM0        =   SCON^7;
 sbit SM1        =   SCON^6;
 sbit SM2        =   SCON^5;
 sbit REN        =   SCON^4;
 sbit TB8        =   SCON^3;
 sbit RB8        =   SCON^2;
 sbit TI         =   SCON^1;
 sbit RI         =   SCON^0;
 sfr SBUF        =   0x99;    
 sfr S2CON       =   0x9A;    
 sfr S2BUF       =   0x9B;    
 sfr S3CON       =   0xAC;    
 sfr S3BUF       =   0xAD;    
 sfr S4CON       =   0x84;    
 sfr S4BUF       =   0x85;    
 sfr SADDR       =   0xA9;    
 sfr SADEN       =   0xB9;    
 
 
 sfr ADC_CONTR   =   0xBC;    
 sfr ADC_RES     =   0xBD;    
 sfr ADC_RESL    =   0xBE;    
 
 
 sfr SPSTAT      =   0xCD;    
 sfr SPCTL       =   0xCE;    
 sfr SPDAT       =   0xCF;    
 
 
 sfr IAP_DATA    =   0xC2;    
 sfr IAP_ADDRH   =   0xC3;    
 sfr IAP_ADDRL   =   0xC4;    
 sfr IAP_CMD     =   0xC5;    
 sfr IAP_TRIG    =   0xC6;    
 sfr IAP_CONTR   =   0xC7;    
 
 
 sfr CCON        =   0xD8;    
 sbit CF         =   CCON^7;
 sbit CR         =   CCON^6;
 sbit CCF2       =   CCON^2;
 sbit CCF1       =   CCON^1;
 sbit CCF0       =   CCON^0;
 sfr CMOD        =   0xD9;    
 sfr CL          =   0xE9;    
 sfr CH          =   0xF9;    
 sfr CCAPM0      =   0xDA;    
 sfr CCAPM1      =   0xDB;    
 sfr CCAPM2      =   0xDC;    
 sfr CCAP0L      =   0xEA;    
 sfr CCAP1L      =   0xEB;    
 sfr CCAP2L      =   0xEC;    
 sfr PCA_PWM0    =   0xF2;    
 sfr PCA_PWM1    =   0xF3;    
 sfr PCA_PWM2    =   0xF4;    
 sfr CCAP0H      =   0xFA;    
 sfr CCAP1H      =   0xFB;    
 sfr CCAP2H      =   0xFC;    
 
 
 sfr CMPCR1      =   0xE6;    
 sfr CMPCR2      =   0xE7;    
 
 
 sfr PWMCFG      =   0xf1;    
 sfr PWMCR       =   0xf5;    
 sfr PWMIF       =   0xf6;    
 sfr PWMFDCR     =   0xf7;    
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
#line 6 "..\..\main.c" /0
 
  
#line 1 "..\..\..\..\..\..\..\Keil_v5\C51\INC\stdio.h" /0






 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 typedef unsigned int size_t;
 
 
 #pragma SAVE
 #pragma REGPARMS
 extern char _getkey (void);
 extern char getchar (void);
 extern char ungetchar (char);
 extern char putchar (char);
 extern int printf   (const char *, ...);
 extern int sprintf  (char *, const char *, ...);
 extern int vprintf  (const char *, char *);
 extern int vsprintf (char *, const char *, char *);
 extern char *gets (char *, int n);
 extern int scanf (const char *, ...);
 extern int sscanf (char *, const char *, ...);
 extern int puts (const char *);
 
 #pragma RESTORE
 
 
 
#line 7 "..\..\main.c" /0
 
 


 
 
 
 typedef unsigned int uint;	 
 typedef unsigned char uchar;
 
 
 sfr T2MOD = 0xC9;
 
 sbit S4 = P3^3;
 sbit S5 = P3^2;
 sbit S6 = P3^1;
 sbit S7 = P3^0;
 
 enum PERIPHERAL
 {
 LED = 0x80,
 DEVICE = 0xa0,
 BIT = 0xc0,
 SEG = 0xe0
 };
 
 typedef enum
 {
 UNPRESS = 0, 
 S4_PRESS = 4, 
 S5_PRESS, 
 S6_PRESS, 
 S7_PRESS 
 }KeyEvent_TypeDef;
 


 
 
 
 bit LED0, LED1, LED2, LED3, LED4, LED5, LED6, LED7;
 
 bit Buzzer;
 
 bit Relay;
 
 uchar Dsp_Bit[16] = {0};
 
 uchar Dsp_Code[8] = {0};
 
 uint	Tick;
 
 
 
 char KeyNum;
 
 
 





 
 void Timer2Init(void)		 
 {
 AUXR |= 0x04;		 
 T2L = 0x20;			 
 T2H = 0xD1;			 
 AUXR |= 0x10;		 
 
 IE2 |= 0x04;		 
 EA = 1;
 }
 





 
 void Timer2_Service() interrupt 12
 {
 static uchar dsp_com;
 
 
 Tick++;		
 
 
  P0=~((uchar)LED0|(uchar)LED1<<1|(uchar)LED2<<2|(uchar)LED3<<3|(uchar)LED4<<4|(uchar)LED5<<5|(uchar)LED6<<6|(uchar)LED7<<7);P2=LED;P2=0;
 
  P0=(uchar)Buzzer<<6|(uchar)Relay<<4;P2=DEVICE;P2=0;	
 
  P0=0;P2=BIT;P2=0;									 
  P0=Dsp_Code[dsp_com];P2=SEG;P2=0;		 
  P0=1 << (dsp_com);P2=BIT;P2=0;				 
 if(++dsp_com > 7)								 
 dsp_com = 0;
 }
 





 
 void Seg_Tran(void)
 {
 unsigned char i, j=0, temp;
 for (i=0; i<8; i++, j++)
 {
 switch (Dsp_Bit[j]) 
 {  
 case '0': temp = 0xc0; break;
 case '1': temp = 0xf9; break;
 
 case '2': temp = 0xa4; break;
 case '3': temp = 0xb0; break;
 
 case '4': temp = 0x99; break;
 
 case '5': temp = 0x92; break;
 case '6': temp = 0x82; break;
 
 case '7': temp = 0xf8; break;
 
 case '8': temp = 0x80; break;
 case '9': temp = 0x90; break;
 
 case 'A': temp = 0x88; break;
 case 'B': temp = 0x83; break;
 case 'C': temp = 0xc6; break;
 case 'D': temp = 0xA1; break;
 case 'E': temp = 0x86; break;
 case 'F': temp = 0x8E; break;
 case 'H': temp = 0x89; break;
 case 'L': temp = 0xC7; break;
 case 'N': temp = 0xC8; break;
 case 'P': temp = 0x8c; break;
 case 'U': temp = 0xC1; break;
 case '-': temp = 0xbf; break;
 case ' ': temp = 0xff; break;
 case '^': temp = 0xfe; break;  
 case '_': temp = 0xf7; break;  
 default: temp = 0xff;
 }
 if (Dsp_Bit[j+1] == '.')
 {
 temp = temp&0x7f;              
 j++;
 }
 Dsp_Code[i] = temp;
 }
 }
 








 
 KeyEvent_TypeDef KeyScan(void)
 {
 
 static uchar S4_value = 0xFF;
 static uchar S5_value = 0xFF;
 static uchar S6_value = 0xFF;
 static uchar S7_value = 0xFF;
 static uchar lock = 0;
 
 
 
 S4_value <<= 1;
 S4_value |= S4;
 S5_value <<= 1;
 S5_value |= S5;
 S6_value <<= 1;	
 S6_value |= S6;
 S7_value <<= 1;
 S7_value |= S7;
 
 if((!S4_value||!S5_value||!S6_value||!S7_value) && !lock)	 
 {
 lock = 1;				 
 if(!S4_value)
 return S4_PRESS;
 else if(!S5_value)
 return S5_PRESS;
 else if(!S6_value)
 return S6_PRESS;
 else if(!S7_value)
 return S7_PRESS;
 }
 else if(S4_value && S5_value && S6_value && S7_value && lock)			 
 {
 lock = 0;													
 }
 else{																	 
 }
 
 return UNPRESS;  
 }
 




 
 uchar Read_Key(void)
 {
 static uchar    pre_scan = 0,     
 pre_trg = 0;             
 uchar   scan = 0,             
 trg = 0,                 
 value = 0,              
 key_x = 0,
 key_y = 0;
 
 P3 = 0x0f;
 P4 = 0x00;
 if(!P30)        key_x = 3;           
 else if(!P31)   key_x = 2;
 else if(!P32)   key_x = 1;
 else if(!P33)   key_x = 0;
 
 P3 = 0xf0;
 P4 = 0xff;
 if(!P34)        key_y = 4;           
 else if(!P35)   key_y = 3;
 else if(!P42)   key_y = 2;
 else if(!P44)   key_y = 1;
 
 scan = key_x + key_y * 4;		  
 
 if(scan == pre_scan)             
 trg = scan;
 else
 trg = 0;
 
 if(trg == pre_trg)               
 value = 0;
 else 
 value = trg;                 
 
 pre_scan = scan;			  
 pre_trg = trg;
 
 return value;     
 }
 





 
 void Display_Task(void)
 {
 static uchar Display_Tick;
 
 if((Tick - Display_Tick) > 500)
 {	
 Display_Tick = Tick;		
 sprintf(Dsp_Bit, "%9.2f", (float)KeyNum);
 
 }
 Seg_Tran();
 }
 





 
 void Key_Task(void)
 {
 static uint Key_Tick;							
 char Key_Value;							
 
 if((Tick - Key_Tick) > 2)
 {
 Key_Tick = Tick;
 
 Key_Value = Read_Key();
 switch (Key_Value)
 {
 case 4:case 5:case 6:case 7:case 8:case 9:case 10:case 11:case 12:case 13:case 14:case 15:case 16:case 17:case 18:case 19:
 KeyNum = -Key_Value;
 break;
 default:
 break;
 }			
 }
 }	
 





 
 void Data_Task(void)
 {
 static uint Data_Tick;
 
 if((Tick - Data_Tick) > 500)
 {	
 Data_Tick = Tick;
 }
 
 }
 





 
 void Logic_Task(void)
 {
 static uint Logic_Tick;
 
 if((Tick - Logic_Tick) > 500)
 {	
 Logic_Tick = Tick;
 }
 
 }
 





 
 void P_Init(void)				 
 {
  P0=0xff;P2=LED;P2=0;		 
  P0=0x00;P2=DEVICE;P2=0;	 
  P0=0x00;P2=BIT;P2=0;		 
  P0=0xff;P2=SEG;P2=0;		 
 
 Timer2Init();
 }
 


 
 void main(void)
 {
 
 P_Init();
 
 
 while(1)
 {
 Display_Task();
 Key_Task();
 Data_Task();
 Logic_Task();
 }        
 }
